我有兴趣对一个集合进行排序,但也返回一个索引,该索引可用于映射到集合中的原始位置(排序之前).
让我举一个例子来说明一点:
List<int> A = new List<int>(){3,2,1};
List<int> B;
List<int> idx;
Sort(A,out B,out idx);
Run Code Online (Sandbox Code Playgroud)
之后:
A = [3,2,1]
B = [1,2,3]
idx = [2,1,0]
Run Code Online (Sandbox Code Playgroud)
所以A,B,idx之间的关系是:
A[i] == B[ idx[i] ] ,因为i = 0 ... 2
C#/ .Net是否有任何内置机制使其易于实现?
谢谢.
看起来这应该是直截了当的,但我无法做到正确.我查看了http://idunno.org/archive/2004/14/01/122.aspx以供参考.
示例:我想打印一个double值表,每个double输出具有3个十进制精度,并占用10个空格(左对齐).从概念上讲,我尝试过这样的东西,但它只适用于精确的OR填充,而不是两者:
foreach(line in lines)
{
foreach (double val in line)
{
Console.Write("{0:0.000,-10}", val);
}
Console.WriteLine()
}
Run Code Online (Sandbox Code Playgroud)
更新:我可以在非常简单的场景中使用padleft/padright,如果我有更复杂的输出它变得不是很简洁.是否有类似于sprintf的东西?
快速背景:我在Vista-x64机器上的.net 3.5下在VS2008中开发C#
我最近切换到Vista-x64并经过一些搜索,我仍然觉得我并不完全理解OS和.net框架之间的相互作用.我想对此进行一些更正/澄清.
以下是我对开发过程的理解(如果我弄错了,请更正):
当我设置我的项目时,我可以设置平台目标:x64,x86,AnyCpu.据我了解,AnyCpu将针对当前平台(在我的情况下为x64).我也可以定位x86并仍然执行它(由于WoW64).
我假设当我定位x64时,程序将使用64位.net框架3.5,以及x86的类似32位框架.它是否正确?
令我困惑的是,当我定位x64并打印出平台信息时,它会打印" WIN32NT ".这让我相信" WIN32NT "不是我认为的那样,但我还没有找到很多关于这一点.这是什么?
ComputerInfo computerInfo = new ComputerInfo();
Console.WriteLine("{0,-30}:\t{1}", "Platform", computerInfo.OSPlatform);
Run Code Online (Sandbox Code Playgroud)
谢谢.