日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

如何洗牌 ListT 中的元素?

發布時間:2023/12/4 编程问答 39 豆豆
生活随笔 收集整理的這篇文章主要介紹了 如何洗牌 ListT 中的元素? 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

咨詢區

  • mirezus

是否有一個最佳的方式對 List<T> 進行洗牌排序,我的項目有一個抽獎模塊,需要對一個有 75個元素的 List<T> 進行隨機排序,請問大家有什么好的實現方式。

回答區

  • user453230

如果你僅僅是想對List中的item進行隨機化排序,我個人推薦一種高效的方式,那就是按照 GUID 排序,參考如下代碼:

var?shuffledcards?=?cards.OrderBy(a?=>?Guid.NewGuid()).ToList();

評論中有朋友指出了,GUID并不能保證完全隨機化,所以還有另外一種方式就是使用 Random 類替代,參考如下:

private?static?Random?rng?=?new?Random(); ... var?shuffledcards?=?cards.OrderBy(a?=>?rng.Next()).ToList();
  • Xelights

如果你不介意使用兩個List的話,那么我這個將是最簡單粗暴的實現方式,但它不是最高效的。

List<int>?xList?=?new?List<int>()?{?1,?2,?3,?4,?5?}; List<int>?deck?=?new?List<int>();foreach?(int?xInt?in?xList)deck.Insert(random.Next(0,?deck.Count?+?1),?xInt);
  • Shehab Fawzy

你可以通過 擴展方法 的形式實現,首先定義一個擴展方法。

public?static?class?IEnumerableExtensions {public?static?IEnumerable<t>?Randomize<t>(this?IEnumerable<t>?target){Random?r?=?new?Random();return?target.OrderBy(x=>(r.Next()));}???????? }

然后可以像下面這樣調用。

//?use?this?on?any?collection?that?implements?IEnumerable! //?List,?Array,?HashSet,?Collection,?etcList<string>?myList?=?new?List<string>?{?"hello",?"random",?"world",?"foo",?"bar",?"bat",?"baz"?};foreach?(string?s?in?myList.Randomize()) {Console.WriteLine(s); }

點評區

這個問題挺有意思,前幾年在項目開發中還真有這么一個需求,第一次我采用了 Guid.NewGuid(),但相信用過的朋友都知道,這玩意用起來真的太慢了,尤其上十萬數據之后,所以后期采用了 new Random() 的方式。

總結

以上是生活随笔為你收集整理的如何洗牌 ListT 中的元素?的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。