C#学习教程:如何在保持c#中的内部顺序的同时将2个排序列表合并到打乱列表中maintaininginternalorderinc#我想要一个混乱的合并列表,它将保持列表的内部顺序。例如:ListA:112233ListB:678有效结果:112263378无效结果:221176338原答案:staticIEnumerableMergeShuffle(IEnumerablelista,IEnumerablelistb){varfirst=清单.GetEnumerator();varsecond=listb.GetEnumerator();varrand=newRandom();boolexhaustedA=false;boolexhaustedB=false;while(!(exhaustedA&&exhaustedB)){boolfound=false;if(!exhaustedB&&(exhaustedA||rand.Next(0,2)==0)){exhaustedB=!(found=second.MoveNext());if(found)yieldreturnsecond.Current;}if(!found&&!exhaustedA){exhaustedA=!(found=first.MoveNext());if(found)yieldreturnfirst.Current;}}}第二个答案基于marcog的回答varrandom=newRandom();varindexes=Enumerable.Range(0,total-1).OrderBy(_=>random.NextDouble()).Take(lista.Count()).OrderBy(x=>x).ToList();varfirst=lista.GetEnumerator();varsecond=listb.GetEnumerator();for(inti=0;i只是随机选择一个列表(例如生成一个介于0和1之间的随机数,如果<0.5列表A,否则列表B),然后从该列表中取出该元素并将其添加到一个新的列出并重复,直到每个列表中没有剩余元素。在区间[0,B.Length]中生成A.Length随机整数。对随机数进行排序,然后从0...0..A.Length迭代i中提取,将A[i]添加到B位置r[i]+i.+i是因为当你从A插入值时,你将B的原始值向右移动。这将与你的RNG一样随机。只需迭代两个列表同时随机选择您要从中选择项目的一个。然后将它们粘贴到另一个列表这是一种方法:将排序列表合并到打乱列表中,同时保持c#中的内部顺序所有共享的内容,如果对大家有用,需要详细了解C#学习教程,希望大家多加关注—staticIEnumerableShuffle(IEnumerablelistB,IEnumerablelistA){varrng=newRandom();varlists=new[]{newQueue(listA),newQueue(listB)};while(lists.Any(l=>l.Any())){inti=rng.Next(2);varselected=lists[i];如果(!lists[i].Any())选择=lists[1-i];yieldreturnselected.Dequeue();}}本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如有转载请注明出处:
