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

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

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

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

Q&A

解決済

3回答

1838閲覧

if文

退会済みユーザー

退会済みユーザー

総合スコア0

Swift

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

0グッド

0クリップ

投稿2017/04/18 12:43

編集2017/04/19 07:00

###実現したいこと
重複なく値を出力させたい。

###該当のソースコード

swift

1//: Playground - noun: a place where people can play 2 3import UIKit 4 5var RandomNumber = arc4random\(\) % 4 6 7RandomNumber \+= 1 8 9//空の配列を用意 10var party = \[String\]\(\) 11 12switch \(RandomNumber\) { 13 14case 1: 15 16print\("a"\) 17//配列に値を追加 18party\.append\("やった!"\) 19break 20 21 22case 2: 23print\("b"\) 24party\.append\("できた!"\) 25break 26 27 28case 3: 29print\("c"\) 30 31party\.append\("すごい!"\) 32 33break 34 35case 4: 36print\("d"\) 37 38 39party\.append\("完成!"\) 40break 41 42 43default: 44 45 break 46 47} 48 49 50 51 52 53 54 55 56

###やったこと
まず空の配列を用意し、caseで選ばれたものを空の配列の中に入れました。

###できないこと
配列の中に同じ値が入っていたらfor文で初めから読み込み配列の中に値が入ってなかったらその値を出力させるプログラムの書き方がわかりません。(重複させない)
アドバイスなどありましたらお願いします

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

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

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

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

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

fuzzball

2017/04/18 23:37

同じ質問をしないで下さい。
guest

回答3

0

配列の中に同じ値が入っていたらfor文で初めから読み込み配列の中に値が入ってなかったらその値を出力させるプログラムの書き方がわかりません。(重複させない)

というのを解釈し直し、配列[1,2,3,4]をランダムにソート(もちろん重複しません)してやって、それぞれの値に該当するstringを取得するようにしてみてはいかがでしょう?

swift

1//: Playground - noun: a place where people can play 2 3import Cocoa 4 5// http://qiita.com/codelynx/items/4c5c6c2faf8315c208fe 6extension Array { 7 mutating func shuffle() -> Array { 8 for i in 0 ..< (count - 1) { 9 let j = Int(arc4random_uniform(UInt32(count - i))) + i 10 if i != j { 11 swap(&self[i], &self[j]) 12 } 13 } 14 return self 15 } 16} 17 18// party に入れる代わりに関数で返すように 19func getMessage(_ RandomNumber: Int) -> String { 20 switch (RandomNumber) { 21 case 1: 22 return "やった!" 23 24 case 2: 25 return "できた!" 26 27 case 3: 28 return "すごい!" 29 30 case 4: 31 return "完成!" 32 33 default: 34 return "" 35 } 36} 37 38var numbers: [Int] = [1, 2, 3, 4] 39 40 41// mapを使うとfor文を使って逐次 [string] に append() するよりスッキリ書けます 42var party: [String] = numbers.shuffle().map{ getMessage($0) } 43 44// playground で見やすくするため 45party

投稿2017/04/18 22:02

TakeoAsai

総合スコア880

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

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

退会済みユーザー

退会済みユーザー

2017/04/19 03:42

func getMessage(_ RandomNumber: Int) -> String { の部分はどのような意味になりますか?
TakeoAsai

2017/04/19 05:02

関数です。 何度も使うものは関数として分けてやるとわかりやすくなります。
guest

0

ベストアンサー

申し訳ございません。
こちらでいかがでしょうか?
func removeOverlap(arr: Array<String>) -> Array<String>から始まる部分は独立したメソッドしてソースコード内にコピペしてみてください。

//空の配列を用意
var arr = String

while arr.count < 4 { var RandomNumber = arc4random() % 4 RandomNumber += 1 switch (RandomNumber) { case 1: //配列に値を追加 arr.append("やった!") break case 2: arr.append("できた!") break case 3: arr.append("すごい!") break case 4: arr.append("完成!") break default: break } arr = removeOverlap(arr: arr) } func removeOverlap(arr: Array<String>) -> Array<String> { let arrCnt = arr.count let order = NSOrderedSet(array: arr) let reArr = order.array as! [String] if arrCnt == reArr.count { print(reArr[arrCnt - 1]) } return reArr }

投稿2017/04/19 00:04

yuabe

総合スコア143

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

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

退会済みユーザー

退会済みユーザー

2017/04/19 03:46

大丈夫でした!!! ありがとうございます!!
guest

0

以下の感じでいかがでしょうか?

//空の配列を用意
var arr = String

while arr.count < 4 {
var RandomNumber = arc4random() % 4

RandomNumber += 1

switch (RandomNumber) {

case 1:

print("a")
//配列に値を追加
arr.append("やった!")
break

case 2:
print("b")
arr.append("できた!")
break

case 3:
print("c")

arr.append("すごい!")

break

case 4:
print("d")

arr.append("完成!")
break

default:

break

}

arr = removeOverlap(arr: arr)
}

func removeOverlap(arr: Array<String>) -> Array<String> {
let arrCnt = arr.count
let order = NSOrderedSet(array: arr)
let reArr = order.array as! [String]

if arrCnt == reArr.count { print(reArr[arrCnt - 1]) } return reArr

}

投稿2017/04/18 18:09

yuabe

総合スコア143

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

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

退会済みユーザー

退会済みユーザー

2017/04/18 22:58

ありがとうございます 試して見たところ、 コードの arr = removeOverlap(arr: arr) で: Use of unresolved identifier 'removeOverlap'というエラーが発生しました。 未解決?だというふうなエラーだと。 しかし、プログラムはきちんと動いて結果は a やった! c すごい! a b できた! d 完成! でした。途中abとなっています
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

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

ただいまの回答率
85.48%

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

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

質問する

関連した質問