什么时候使用List vs LinkedList更好?
有没有什么方法可以将项目索引作为每个拆分的分隔符List<SomeObject>分成几个单独的列表SomeObject?
让我举例说明:
我有一个List<SomeObject>,我需要一个List<List<SomeObject>>或List<SomeObject>[],所以这些结果列表中的每一个将包含一组3个原始列表项(顺序).
例如.:
原始清单: [a, g, e, w, p, s, q, f, x, y, i, m, c]
结果列表: [a, g, e], [w, p, s], [q, f, x], [y, i, m], [c]
我还需要将结果列表大小作为此函数的参数.
我想把IEnumerable<T>它分成固定大小的块.
我有这个,但由于所有列表创建/复制,它似乎不优雅:
private static IEnumerable<IEnumerable<T>> Partition<T>(this IEnumerable<T> items, int partitionSize)
{
List<T> partition = new List<T>(partitionSize);
foreach (T item in items)
{
partition.Add(item);
if (partition.Count == partitionSize)
{
yield return partition;
partition = new List<T>(partitionSize);
}
}
// Cope with items.Count % partitionSize != 0
if (partition.Count > 0) yield return partition;
}
Run Code Online (Sandbox Code Playgroud)
有没有更惯用的东西?
编辑:虽然这已被标记为Divide数组的副本到子序列数组的数组,但它不是 - 该问题涉及拆分数组,而这是关于IEnumerable<T>.此外,该问题要求填充最后一个子序列.这两个问题密切相关,但并不相同.
如何获取List(使用LINQ)并将其分解为每隔8个条目分区原始列表的列表列表?
我想像这样的东西会涉及Skip和/或Take,但我仍然是LINQ的新手.
编辑:使用C#/ .Net 3.5
编辑2:这个问题的措辞不同于其他"重复"问题.虽然问题是相似的,但这个问题的答案是优越的:"接受"的答案都非常可靠(包括yield声明)以及Jon Skeet建议使用MoreLinq(在"其他"问题中不推荐使用).有时复制是好的,因为它们迫使重新检查问题.
我需要在中点将一个不确定大小的数组拆分成两个独立的数组.
使用ToArray()从字符串列表生成数组.
public void AddToList ()
{
bool loop = true;
string a = "";
Console.WriteLine("Enter a string value and press enter to add it to the list");
while (loop == true)
{
a = Console.ReadLine();
if (a != "")
{
mylist.Add(a);
}
else
{
loop = false;
}
}
}
public void ReturnList()
{
string x = "";
foreach (string number in mylist)
{
x = x + number + " ";
}
Console.WriteLine(x);
Console.ReadLine();
}
}
class SplitList …Run Code Online (Sandbox Code Playgroud) 我知道如何以丑陋的方式做到这一点,但我想知道是否有更优雅和简洁的方法.
我有一个字符串数组的电子邮件地址.假设字符串数组具有任意长度 - 它可能有几个项目,或者它可能有很多项目.我想构建另一个字符串,包括来自字符串数组的50个电子邮件地址,直到数组的末尾,并在每个50之后使用Send()方法中的50个地址的字符串调用发送操作.
更普遍的问题是做这种事情的最干净/最清晰的方法是什么.我有一个解决方案,这是我的VBScript学习的遗产,但我认为在C#中有更好的方法.
有没有办法使用一个循环,它取一个大列表中的前100项,与它们做一些事情,然后下一个100等,但当它接近结束时,它会自动缩短"100"步骤到剩余的项目.
目前我必须使用两个if循环:
for (int i = 0; i < listLength; i = i + 100)
{
if (i + 100 < listLength)
{
//Does its thing with a bigList.GetRange(i, 100)
}
else
{
//Does the same thing with bigList.GetRange(i, listLength - i)
}
}
Run Code Online (Sandbox Code Playgroud)
有没有更好的方法呢?如果不是,我将至少使"事物"成为一个函数,因此代码不必被复制两次.
F#有一堆标准的序列操作符,我已经了解并喜欢我对Mathematica的体验.F#现在得到了很多关注,当它一般发布时,我打算经常使用它.
现在,由于F#尚未普遍发布,我无法在生产代码中真正使用它.LINQ使用类似SQL的名称来实现其中一些运算符(例如'select'是'map','where'是'filter'),但是我找不到'fold','iter'或'partition'的实现.
有没有人见过标准序列运算符的任何C#实现?这是某人应该写的东西吗?
我有一个字符串列表,我发送到队列.我需要拆分列表,以便最终得到一个列表列表,其中每个列表包含最大(用户定义)字符串数.因此,例如,如果我有一个列表,其中包含以下A,B,C,D,E,F,G,H,I和列表的最大大小为4,我想最终得到一个列表列表第一个列表项包含:A,B,C,D,第二个列表有:E,F,G,H,最后一个列表项只包含:I.我查看了"TakeWhile"函数,但不确定是否这是最好的方法.对此有何解决方案?
我想拆分DataTable,以便我可以将其块从一个地方上传到另一个地方.
例如
先挑100行.
接下来的100行.
挑选下一行100行等等......
有没有办法像数据库中的光标一样做?我不喜欢使用循环等来计算行数.