反转整数值列表

时间:2011-05-30 13:26:32

标签: c#

我有一个整数值列表,可以是1到4之间的任何值。 所以,比方说{1,2,4,1,3,2,1,4,4}。 我现在想以下列方式反转值: 所有条目都包含......

  • 1应转换为4,
  • 2应转换为3,
  • 3应转换为2,
  • 4应转换为1.

有很多方法可以做到这一点,但我想采取最有效的方法。

有什么想法吗?

6 个答案:

答案 0 :(得分:7)

for(int i = 0; i < array.Length; i++)
{
    array[i] = 5 - array[i];
}

答案 1 :(得分:2)

实施此功能:

f(x)= 5 - x

答案 2 :(得分:1)

效率最高的是带有case语句的for循环,但它不是最灵活或最漂亮的。您可以提出的任何解决方案,只能循环一次循环可以被视为合适的解决方案,因为它们都将执行O(N)。

答案 3 :(得分:1)

尝试以下方法:

var result = list.Select(item => 5 - item);

答案 4 :(得分:0)

我不知道效率,但我认为首先过滤掉所有重复项(认为有一个LINQ扩展方法),然后从最小到最大排序,最后创建一个哈希映射(包含转换的字典&lt; int,int&gt;)。然后你可以像这样运行数组:

for(int i = 0, l = sortedUniqueArray.Count; i < l; i++) {
    dict[sortedUniqueArray[i]] = sortedUniqueArray[l - i];
}

或类似的东西。然后你可以做这样的最终替换:

orgArray.Select(itm => dict[itm]);

答案 5 :(得分:0)

我认为编写转换规则和使用此规则的好方法可以执行转换。