反转整数值列表
本文关键字:列表 整数 | 更新日期: 2023-09-27 17:58:03
我有一个整数值列表,可以是1到4之间的任何值。比方说{1,2,4,1,3,2,1,4,4}
。我现在想以以下方式反转这些值:所有带有…的条目。。。
- 1应该被转换为4
- 2应转换为3
- 3应该转换为2
- 4应转换为1
有很多方法可以做到这一点,但我想采取最有效的方法。
有什么想法吗?
for(int i = 0; i < array.Length; i++)
{
array[i] = 5 - array[i];
}
实现此功能:
f(x)=5-x
最有效的是带有case语句的for循环,但它并不是最灵活或最漂亮的。你能想到的任何只迭代循环一次的解决方案都可以被认为是不错的解决方案,因为它们都是O(N)执行的。
尝试以下操作:
var result = list.Select(item => 5 - item);
我不知道效率,但我认为首先过滤掉所有重复项(考虑有一个LINQ扩展方法),然后从最小到最大排序,最后创建一个包含转换的哈希图(Dictionary<int,int>)。然后你可以像这样运行阵列:
for(int i = 0, l = sortedUniqueArray.Count; i < l; i++) {
dict[sortedUniqueArray[i]] = sortedUniqueArray[l - i];
}
或者类似的东西。然后你可以这样做最后的替换:
orgArray.Select(itm => dict[itm]);
我认为编写转换规则并使用这些规则执行转换的好方法。