{ "title": "C# 打乱 List 并建立索引映射关系", "description": "使用 Fisher-Yates 算法在 C# 中打乱一个长度为 6 的 List,并建立原始索引到打乱后索引和打乱后索引到原始索引的映射关系,方便定位元素位置。", "keywords": "C#, List, Fisher-Yates 算法, 打乱顺序, 索引映射, 随机排序", "content": "你可以使用 Fisher-Yates 算法来打乱一个 List 的顺序,并且使用两个 Dictionary 来建立索引的映射关系。\n\n首先,导入System.Collections.Generic命名空间,然后可以使用以下代码实现:\n\ncsharp\nusing System;\nusing System.Collections.Generic;\n\nclass Program\n{\n static void Main(string[] args)\n {\n List<float> originalList = new List<float>() { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };\n\n // 打乱顺序\n List<float> shuffledList = ShuffleList(originalList);\n\n // 创建索引映射关系\n Dictionary<int, int> originalToShuffledIndex = CreateIndexMapping(originalList, shuffledList);\n Dictionary<int, int> shuffledToOriginalIndex = CreateIndexMapping(shuffledList, originalList);\n\n // 打印映射关系\n Console.WriteLine("原始索引 -> 打乱后索引:");\n foreach (var kvp in originalToShuffledIndex)\n {\n Console.WriteLine($"{kvp.Key} -> {kvp.Value}");\n }\n\n Console.WriteLine("打乱后索引 -> 原始索引:");\n foreach (var kvp in shuffledToOriginalIndex)\n {\n Console.WriteLine($"{kvp.Key} -> {kvp.Value}");\n }\n }\n\n static List<float> ShuffleList(List<float> list)\n {\n Random random = new Random();\n int n = list.Count;\n while (n > 1)\n {\n n--;\n int k = random.Next(n + 1);\n float value = list[k];\n list[k] = list[n];\n list[n] = value;\n }\n return list;\n }\n\n static Dictionary<int, int> CreateIndexMapping(List<float> originalList, List<float> shuffledList)\n {\n Dictionary<int, int> indexMapping = new Dictionary<int, int>();\n for (int i = 0; i < originalList.Count; i++)\n {\n indexMapping.Add(i, shuffledList.IndexOf(originalList[i]));\n }\n return indexMapping;\n }\n}\n\n\n此代码首先定义了一个长度为6的原始List,然后通过调用ShuffleList方法打乱了顺序,生成了打乱后的List。接下来,通过调用CreateIndexMapping方法,分别创建了原始索引到打乱后索引的映射和打乱后索引到原始索引的映射。\n\n最后,程序将打印出这两个映射关系。你可以根据索引映射关系来定位到原始索引或打乱后索引。\n

C# 打乱 List<Float> 并建立索引映射关系

原文地址: https://www.cveoy.top/t/topic/pzRu 著作权归作者所有。请勿转载和采集!

免费AI点我,无需注册和登录