C#一个长度为6的ListFloat要求生成一个把内部元素的顺序打乱之后的ListFloat而且既可以根据打乱之后的List元素的索引定位到打乱之前的元素的索引也可以根据打乱之前的索引定位到打乱之后的索引
你可以使用Fisher-Yates算法来打乱一个List
首先,导入System.Collections.Generic命名空间,然后可以使用以下代码实现:
using System;
using System.Collections.Generic;
class Program
{
static void Main(string[] args)
{
List<float> originalList = new List<float>() { 1.0f, 2.0f, 3.0f, 4.0f, 5.0f, 6.0f };
// 打乱顺序
List<float> shuffledList = ShuffleList(originalList);
// 创建索引映射关系
Dictionary<int, int> originalToShuffledIndex = CreateIndexMapping(originalList, shuffledList);
Dictionary<int, int> shuffledToOriginalIndex = CreateIndexMapping(shuffledList, originalList);
// 打印映射关系
Console.WriteLine("原始索引 -> 打乱后索引:");
foreach (var kvp in originalToShuffledIndex)
{
Console.WriteLine($"{kvp.Key} -> {kvp.Value}");
}
Console.WriteLine("打乱后索引 -> 原始索引:");
foreach (var kvp in shuffledToOriginalIndex)
{
Console.WriteLine($"{kvp.Key} -> {kvp.Value}");
}
}
static List<float> ShuffleList(List<float> list)
{
Random random = new Random();
int n = list.Count;
while (n > 1)
{
n--;
int k = random.Next(n + 1);
float value = list[k];
list[k] = list[n];
list[n] = value;
}
return list;
}
static Dictionary<int, int> CreateIndexMapping(List<float> originalList, List<float> shuffledList)
{
Dictionary<int, int> indexMapping = new Dictionary<int, int>();
for (int i = 0; i < originalList.Count; i++)
{
indexMapping.Add(i, shuffledList.IndexOf(originalList[i]));
}
return indexMapping;
}
}
此代码首先定义了一个长度为6的原始ListShuffleList方法打乱了顺序,生成了打乱后的ListCreateIndexMapping方法,分别创建了原始索引到打乱后索引的映射和打乱后索引到原始索引的映射。
最后,程序将打印出这两个映射关系。你可以根据索引映射关系来定位到原始索引或打乱后索引
原文地址: https://www.cveoy.top/t/topic/hQL1 著作权归作者所有。请勿转载和采集!