gpt4 book ai didi

c# - 我用来随机排序列表。我可以对 Enumerable 做同样的事情吗?

转载 作者:行者123 更新时间:2023-11-30 19:02:37 26 4
gpt4 key购买 nike

这是我在列表中随机排序第一个 N 元素的代码:

int upper = 1;
if (myList.Count > 1)
{
Random r = new Random();
upper = Math.Min(maxNumberOfPackets, myList.Count);
for (int i = 0; i < upper; i++)
{
int randInd = r.Next(i, myList.Count);
var temp = myList[i];
myList[i] = myList[randInd];
myList[randInd] = temp;
}
}

好吧,现在我“有必要”只使用 Enumerable(出于某种原因;所以我不想将其转换为 Enumerable)。

据您所知,我可以对 Enumerable 做同样的事情吗?我认为痛苦是在 X 位置访问元素......

我很好奇...

最佳答案

IEnumerable[<T>]来源,你通常应该只假设它们可以被阅读一次,当然,在你消费它之前你不能可靠地知道它的长度。随机化通常需要缓冲。你也可以这样做:

var list = source.ToList();

并且只使用您现有的列表随机化代码。您当然可以将该列表返回为 IEnumerable[<T>]如果您想保持输入和输出相似,请再次进行。

如果您真的想要,您可以从一开始就打乱:

static IEnumerable<T> ScrambleStart(this IEnumerable<T> source,
int numberToScramble)
{
using(var iter = source.GetEnumerator()) {
List<T> list = new List<T>();
while(iter.MoveNext()) {
list.Add(iter.Current);
if(list.Count == numberToScramble) break;
}
ScrambleList(list); // your existing code
foreach(var item in list) yield return item;
while(iter.MoveNext()) {
yield return iter.Current;
}
}
}

关于c# - 我用来随机排序列表。我可以对 Enumerable 做同样的事情吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10977402/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com