如何解决用种子随机列出
我正在寻找一种使用种子将列表随机化的方法。我想通过此实现的是受控随机化。换句话说,如果我使用相同的种子来执行操作,请确保列表始终以相同的顺序随机分配。
我当前正在使用此代码:
string arbitrarySeed = "someValue";
System.Random random = new System.Random(BitConverter.ToInt32(Encoding.ASCII.GetBytes(arbitrarySeed),0));
List<object> randomizedOptions = items?.OrderBy(o => random.Next()).ToList();
这似乎有些复杂,所以我正在寻找一种更优雅的方式来处理此问题。
我知道这种方式的随机化实际上并不是很随机,但是我不需要它是真正的随机性。接近的东西会很好。
解决方法
根据您需要生成的序列的“一致性”,可以使用string.GetHashCode
:
string arbitrarySeed = "someValue";
System.Random random = new System.Random(arbitrarySeed.GetHashCode());
List<object> randomizedOptions = items?.OrderBy(o => random.Next()).ToList();
GetHashCode
不能保证在.NET版本或实现(例如Linux,Windows,macOS)之间保持一致,但是如果您需要本地化的一致性,则可能会为您工作。
还要注意,BitConverter.ToInt32
只会占用您传入的数组的4个字节,因此“ someValue”和“ someValue2”将为您提供相同的种子值。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。