2011-05-05 40 views
2

感謝您提供有關將布爾值數組轉換爲字符串的幫助。代碼現在運行良好。現在我有另一個問題。也許有人想嘗試。我想我可以想出一個解決方案,但如果是這樣的話,我99%確信這不會像我從這裏的人們看到的答案那麼簡單。更改基於C#中的數字數組的字符串順序

我的是從我的問題here字符串「ABD」。我也有一個整數數組。例如[0] = 2, [1] = 3 and [2] = 1.我想找到一種方法將此應用於我的字符串以重新排序字符串,以便字符串更改爲BDA。

任何人都可以想到一個簡單的方法來做到這一點?

+0

這是功課嗎? – Jon 2011-05-05 00:35:10

回答

4

如果這些整數是字符串(即2 =第2個字符)內1爲基礎的指數,那麼你可以這樣做:

string s = "ABD"; 
int[] oneBasedIndices = new [] { 2, 3, 1 }; 

string result = String.Join(String.Empty, oneBasedIndices.Select(i => s[i-1])); 

注:如果您使用的是版本低於C#4.0,您需要在選擇的末尾放置一個.ToArray()

什麼這是做正在經歷的int[]以及與每個int元件拾取字符串中的字符在該位置(以及-1,如在陣列的第一個索引是0,但你的例子從1開始) 。

然後,它必須執行String.Join()將該字符集合轉換回字符串。


順便說一句,我建議你下載LINQPad(無連接) - 那麼你可以粘貼代碼中有一個C#程序,並在任何點類型variable.Dump();(如result.Dump();末)和看看當時的價值。

+1

不錯,雖然我更喜歡用'String.Empty'而不是''「' – bitxwise 2011-05-05 00:35:44

+0

@bitxwise - 你說得對,我每週都會改變主意,但是'String.Empty'至少說」我知道這是空的「,而''」'不表達同樣的意圖(「他們忘記了字符串?」)。更新。 – 2011-05-05 00:37:53

+1

我不相信這個功能可以用C#中的1行代碼來實現! (我現在是一名Java開發人員,現在正在學習c#)。印象深刻..:) – 2011-05-05 00:40:11

0

餐巾紙再次碼...

string result = "ABD"; // from last question 
    var indecies = new []{ 1,2,0 }; 

    string result2 = indecies.Aggregate(new StringBuilder(), 
     (sb, i)=>sb.Append(result[i])) 
     .ToString(); 

或不同版本(在贖回自己的憧憬-1)

StringBuilder sb = new StringBuilder(); 
for(int i = 0; i < indecies.Length; i++) 
{ 
    sb.Append(result[i]); // make [i-1] if indecies are 1 based. 
} 
string result3 = sb.ToString(); 
+1

Message = Index超出了數組的範圍。 :-( – Beth 2011-05-05 00:37:08

+0

)你是對的,我從你的問題中複製了2,3,1個indecies,我應該注意到它不是一個基於0的索引(固定的),假設我將停止餐巾編碼的答案 – Jon 2011-05-05 17:46:33

1

首先使字符串的副本。該副本將永遠不會改變;它可以作爲你曾經使用的值的參考。

然後使用for循環一次遍歷原始字符串中的一個字符。 for循環中的計數器是我們將替換的原始字符串中字符的位置。計數器也是數組的索引,用於查找原始字符串中的位置。然後將原始字符串中該位置的字符替換爲複製字符串中的字符。

string orig = "ABD"; 
int[] oneBasedIndices = new [] { 2, 3, 1 }; 

string copy = orig; 
for (int i = 0; i < orig.Length; i++) 
{ 
    orig[i] = copy[ oneBasedIndices[i] - 1 ]; 
} 

你有它。如果指數爲零,請刪除- 1

+0

這個對於初學者來說,這可能是一個更好的例子,因爲你需要先獲得'for'循環,然後才能看到lambda變換。 – 2011-05-05 00:37:01

+1

初學者也可以看到有很多種方法可以完成相同的任務。正在決定使用哪種方式以及爲什麼,而不是僅僅想辦法做到這一點 – 2011-05-05 00:44:01

+0

字符串上的索引器沒有setter,'orig [i] = something;'不起作用,因爲C#中的字符串是不可變的,你將需要建立一個新的字符串。 – Jon 2011-05-05 17:52:14