我无法根据班级中的一个属性来改组列表。我的SCHEDULE
类包含两个属性:sEmployeeID
和sStationID
我按如下方式填充列表,但我希望按ID_STATION
进行随机播放,并在每次运行时都有不同的内容。
List<SCHEDULE> scheduleList = new List<SCHEDULE>();
foreach (DataRow row2 in tschedule.Rows)
{
sEmployeeID = row2["ID_EMPLOYEE"].ToString();
sStationID = row2["ID_STATION"].ToString();
scheduleList.Add(new SCHEDULE(sEmployeeID, sStationID));
}
实际上我想让我的ID_STATION项目更改行,而我的ID_EMPLOYEE将保持原来的位置。示例:从此,
ID_EMPLOYEE ID_STATION
ALAD DECH
FRED DECI
MIKE ORR
PAM OR
RAK ORW
RAYN PROC
我想有这个:
ID_EMPLOYEE ID_STATION
ALAD ORW
FRED PROC
MIKE DECI
PAM DECH
RAK OR
RAYN ORR
答案 0 :(得分:1)
这有效:
scheduleList = scheduleList.Shuffle().ToList();
好的,仅当您添加使用Fisher-Yates-Durstenfeld shuffle的
的扩展程序时,它才有效public static class EnumerableExtensions
{
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source)
{
return source.Shuffle(new Random());
}
public static IEnumerable<T> Shuffle<T>(this IEnumerable<T> source, Random rng)
{
if (source == null) throw new ArgumentNullException("source");
if (rng == null) throw new ArgumentNullException("rng");
return source.ShuffleIterator(rng);
}
private static IEnumerable<T> ShuffleIterator<T>(
this IEnumerable<T> source, Random rng)
{
List<T> buffer = source.ToList();
for (int i = 0; i < buffer.Count; i++)
{
int j = rng.Next(i, buffer.Count);
yield return buffer[j];
buffer[j] = buffer[i];
}
}
}