2016-04-17 16 views
2

私は、ユーザの姓を表す[A, B, B, B, D, G, G, H, M, M, M, M, Z]のようなアルファベット順の値の配列を持っているとします。私はテーブルインデックスを作成しようとしていますので、このような配列(アルファベットのすべての文字で始まる姓を持つ任意の数のユーザー)を配列に分割する最良の方法は、[A] [B, B, B] [D] [G, G] [H] [M, M, M, M] [Z]のような配列ですユーザーが姓で区切られた複数のセクションを持つ表の値を作成します。助けてくれてありがとう!Swift:文字列の配列を一致する値の複数の配列に分割する方法は?

答えて

9

あなたが名前のイニシャルを取得するためにname.characters.firstを使用し、それらを比較することにより、配列の配列を構築することができます

let names = ["Aaron", "Alice", "Bob", "Charlie", "Chelsea", "David"] 

var result: [[String]] = [] 
var prevInitial: Character? = nil 
for name in names { 
    let initial = name.characters.first 
    if initial != prevInitial { // We're starting a new letter 
     result.append([]) 
     prevInitial = initial 
    } 
    result[result.endIndex - 1].append(name) 
} 

print(result) // [["Aaron", "Alice"], ["Bob"], ["Charlie", "Chelsea"], ["David"]] 
+0

ありがとう、ありがとう。どうすれば 'let initial = name.characters.first'行を修正して、スペースの後の文字を最後の名前)?つまり、私はそれを 'John Doe'の' D 'でソートしたいと思っています –

+0

[この回答]をチェックアウトすることができます(http://stackoverflow.com/questions/25678373/swift-split-a-string-配列への)文字列を空白で分割する方法。 – jtbandes

0

元のアレイをループして、新しいアレイに再構築する必要があります。ここでは例です:

$names = array ('anthony', 'bernie', 'bob', 'hank', 'mary', 'mike', 'steve', 'tom', 'tony'); 
$new_names = array(); 

foreach ($names as $name) { 
    //get first letter of name 
    $firstletter = substr($name, 0,1); 

    //test if there is already an array for this letter 
    //if not, create it 
    if (!$new_names[$firstletter]) { 
     $new_names[$firstletter] = array(); 
    } 

    //add the name to the new array under the correct first letter 
    array_push($new_names[$firstletter], $name); 
} 
+0

ニースの答えを助けるホープが、残念ながらこれはPHP :( – jtbandes

+0

ではありませんが、応答をありがとう –

+0

私。!私の頭がPHPで溺れてしまった、あなたが素早く必要であるとは思わなかった –

0

私はこれを行うには良い方法は、フィルタを使用していると思います。このコードを試してみてください。

var array = ["Aa", "Ab", "Bb", "Cc","d", "DDD"] 

let A_array = array.filter({ 
    ($0.characters.first == "A" || $0.characters.first == "a") 
}) 
私はスウィフトで答えを探してい

が、それはあなたに

関連する問題