質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.48%
Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

Q&A

解決済

1回答

2983閲覧

swift 文字列 配列 比較

退会済みユーザー

退会済みユーザー

総合スコア0

Xcode

Xcodeはソフトウェア開発のための、Appleの統合開発環境です。Mac OSXに付随するかたちで配布されています。

Swift

Swiftは、アップルのiOSおよびOS Xのためのプログラミング言語で、Objective-CやObjective-C++と共存することが意図されています

0グッド

0クリップ

投稿2016/08/17 19:48

編集2016/08/18 01:38

###全体的な動き
実行時に入力した3桁の文字列strとInt型の要素数3の配列Arrayを
一文字ずつ比較して等しい数をカウント
どちらも中身は数字だけです
###文字列と配列の比較

  • 対策1

同じ型にしないと比較演算子==が使えないとのことで、
文字列strをInt型に変換して、それを配列に格納したのですが、
文字列strが0から始まる3桁だと、文字列strをInt型に変換する際に、0が消されて2桁になってしまい
要素数が2の配列Arrayが生成されてしまいました。

  • 対策2

文字列strをInt型に変換せず配列を生成(Array(str.character))し、Int型の配列ArrayをString型に変換して比較したのですが、**Binary operator '==' cannot be applied to operands of type '_Element' (aka 'Character') and 'String'**のエラーがでてしまいました。

  • 対策3

上のエラーを検索したらEquitableプロトタイプとかいうのが出てきたので、switch文で比較するらしく見様見真似で書いたのですが、一文字ずつの比較の方法が分からず今に至ります。

###意図

for i in 0..<3{ for j in 0..<3{ if str[i]==Array[j]{ k+=1 } } }

みたいにしたいです。

###追加、変更点
for文を一つ追加。
Arrayの方はjを配列の番号とする。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答1

0

ベストアンサー

以下の様にすると一緒の文字数の結果が取れます。
※ 数字に0が続いても大丈夫。

swift

1let strValue = "012" 2let intValue = 012 3 4var matchCount = 0 5 6let str = NSString(format: "%03d", intValue) as String 7var strArray = Array(str.characters) 8 9Array(strValue.characters).enumerate().forEach({ (index, value) in 10 if value == strArray[index] { 11 matchCount += 1 12 } 13}) 14 15matchCount 16//=> 3

投稿2016/08/17 22:47

編集2016/08/17 23:43
_Kentarou

総合スコア8490

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

退会済みユーザー

退会済みユーザー

2016/08/18 01:38

すいません。自分のミスでfor文を一つぬかして書いてしまいました。
_Kentarou

2016/08/18 03:23

下記のように記述しているところがfor文2個分のところの処理に当たりますが、それでは問題があるということですか? Array(strValue.characters).enumerate().forEach({ (index, value) in if value == strArray[index] { matchCount += 1 } })
退会済みユーザー

退会済みユーザー

2016/08/19 11:43

初心者なもので、へんなコメントすいません動作確認できました。続けて質問失礼します。 これってお互いの配列のインデックスが等しいかどうかの式ってどう書けばいいんですか?
_Kentarou

2016/08/19 11:54

(index, value)に配列のindexとそこに対応する値が渡ってきます。 index = 0 → value = "0" index = 1 → value = "1" index = 2 → value = "2" なのでそのインデックスに対応する値をstrArray[index]から取り出して比較しているのです。 答えになってますか?
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.48%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問