c# - 选择字符串列表的第一个单词并连接 linq 列表中其余项目的最后一个字符

标签 c# python linq python-2.7 python-2.x

有一个像这样的python代码:

reads = ['ACCGA', 'CCGAA', 'CGAAG', 'GAAGC', 'AAGCT']
k=len(reads[0])
rest = ""
for r in reads[1:]:
    rest += (r[k-1:])
print reads[0] + rest

代码获取列表 ACCGA 中的第一项,然后连接列表其余部分中每个项目的最后一个字符,如

the rest = ['CCGAA', 'CGAAG', 'GAAGC', 'AAGCT']

并取'CCGAA', 'CGAAG', 'GAAGC', 'AAGCT'

所以结果 ACCGA + A + G + C + T

result = ACCGAAGCT

在使用 linq 时有什么方法可以做到这一点?

我知道我们可以选择第一项做

string result = myList.Select(arr => arr.FirstOrDefault());

然后连接剩下的

var rest = from p in myList.Items
                 where ....  
                select p;

不知道怎么完成

最佳答案

new []{"ACCGA", "CCGAA", "CGAAG", "GAAGC", "AAGCT"}.Aggregate((a,b)=>a+b.Last())

对于非常大的数组,这会表现得更好:

var arr=new []{"ACCGA", "CCGAA", "CGAAG", "GAAGC", "AAGCT"};
var builder=new StringBuilder(arr.First());
var res=arr.Skip(1).Aggregate(builder,(a,b)=>a.Append(b.Last())).ToString();

对于非常大的列表或数组(任何实现 native 计数/长度的 IEnumerable),这会稍微好一些,预分配 StringBuilder 的大小,随意删除 -1 以浪费额外的字节内存换取少一个减量:

var arr=new []{"ACCGA", "CCGAA", "CGAAG", "GAAGC", "AAGCT"};
var builder=new StringBuilder(arr.First(),arr.First().Length+arr.Length-1);
var res=arr.Skip(1).Aggregate(builder,(a,b)=>a.Append(b.Last())).ToString();

如果你真的需要额外的速度,这里有一个更快的版本:

var arr=new []{"ACCGA", "CCGAA", "CGAAG", "GAAGC", "AAGCT"};
var builder=new StringBuilder(arr.First(),arr.First().Length+arr.Length-1);
var res=arr.Skip(1).Aggregate(builder,(a,b)=>a.Append(b[b.Length-1])).ToString();

更快:

var res=arr[0].Substring(0,arr[0].Length-1)+String.Join("",arr.Select(b=>b[b.Length-1]));

甚至更快:

var arr=Enumerable.Range(0,1000000).Select(x=>"ABCDEFGHIJKLMNOPQ").ToArray();
var len=arr.Length;
var builder=new StringBuilder(arr[0],arr[0].Length+len-1);
for(var x=1;x<len;x++)
{
  builder.Append(arr[x][arr[x].Length-1]);
}
var res=builder.ToString();

关于c# - 选择字符串列表的第一个单词并连接 linq 列表中其余项目的最后一个字符,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32975783/

相关文章:

c# - WPF 工具包 :AutoCompleteBox does not move accordingly as the main Window

c# - 绘制和更新 PictureBox

C# linq 异常 : object reference not set to an instance of an object

c# - LINQ 查询。在此上下文中仅支持原始类型或枚举类型

Where 内的 Linq 语句

c# - 如何使用 System.Timers.Timer 访问/修改另一个线程上的控件?

C# 自定义日期格式

python - 值错误: x and y must be the same size

python - 如何在给定基础的情况下恢复类的 mro?

python - python中如何使列表的索引成为循环?