有,可以使用一个字典来保存打乱之前和打乱之后元素的索引对应关系。下面是一个示例代码:

using System;
using System.Collections.Generic;
using System.Linq;

public class Program
{
    public 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> indexMapping = GenerateIndexMapping(originalList, shuffledList);
        
        // 根据打乱之后的索引定位到打乱之前的索引
        int shuffledIndex = 3;
        int originalIndex = GetOriginalIndex(indexMapping, shuffledIndex);
        Console.WriteLine($"Shuffled index {shuffledIndex} corresponds to original index {originalIndex}");
        
        // 根据打乱之前的索引定位到打乱之后的索引
        int originalIndex2 = 2;
        int shuffledIndex2 = GetShuffledIndex(indexMapping, originalIndex2);
        Console.WriteLine($"Original index {originalIndex2} corresponds to shuffled index {shuffledIndex2}");
    }
    
    // 打乱列表元素顺序
    public static List<float> ShuffleList(List<float> originalList)
    {
        Random random = new Random();
        List<float> shuffledList = originalList.OrderBy(x => random.Next()).ToList();
        return shuffledList;
    }
    
    // 创建字典来保存索引对应关系
    public static Dictionary<int, int> GenerateIndexMapping(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;
    }
    
    // 根据打乱之后的索引定位到打乱之前的索引
    public static int GetOriginalIndex(Dictionary<int, int> indexMapping, int shuffledIndex)
    {
        int originalIndex = indexMapping.FirstOrDefault(x => x.Value == shuffledIndex).Key;
        return originalIndex;
    }
    
    // 根据打乱之前的索引定位到打乱之后的索引
    public static int GetShuffledIndex(Dictionary<int, int> indexMapping, int originalIndex)
    {
        int shuffledIndex = indexMapping[originalIndex];
        return shuffledIndex;
    }
}

该代码首先定义了一个 ShuffleList 方法,用于对列表元素进行打乱顺序操作。然后,通过 GenerateIndexMapping 方法创建字典 indexMapping 来保存打乱之前和打乱之后的索引对应关系。最后,通过 GetOriginalIndexGetShuffledIndex 方法可以根据索引对应关系进行定位。

注意,由于字典是无序的,所以在 GetOriginalIndex 方法中使用了 FirstOrDefault 来获取第一个符合条件的索引对应关系。如果需要处理重复的情况,可以根据具体需求进行修改

C#一个长度为6的ListFloat要求生成一个把内部元素的顺序打乱之后的ListFloat而且既可以根据打乱之后的List元素的索引定位到打乱之前的元素的索引也可以根据打乱之前的索引定位到打乱之后的索引。有没有只用一个字典的方法

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

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