Quantcast
Channel: 配列タグが付けられた新着記事 - Qiita
Viewing all articles
Browse latest Browse all 757

[Swift5]paizaでよく使う文法メモ(初心者向け)

$
0
0

背景

普段Swift使ってアプリを開発していますが、
「paizaをSランクにしておくといいかも」との助言もあり、ついこの間paizaをやりはじめてみました。

普段使わない文法で慣れていなかったり、そもそもコードのバージョンが古いサイトもあったので、自分用に「paizaでよく使う文法」をまとめました。
参考にどうぞ。

よく使うコード

標準入力

//1行取得 例:1letinput_line=readLine()!//複数行 letinput_line1=readLine()!letinput_line2=readLine()!letinput_line3=readLine()!//複数行varstrs=[String]()for_in0..<8{strs.append(readLine()!)}//複数行whileletline=readLine(){// 入力された行に対する処理}

※7/4追記
コメント欄で以下の方法を教えていただきました。ありがとうございます。

//複数行取得lets=AnyIterator{readLine()}.joined()//配列で取得(くそ便利)letarr=Array(AnyIterator{readLine()})

文字列の処理

//例: 1 3 5 7 → ["1","3","5","7"]letstrs=input_line.split(separator:" ")//例: 16357 → ["1","6","3","5","7"]letstrs=input_line.map{String($0)}//例: ["1","3","5","7"] → [1,3,5,7]letnumbers=strs.map({Int($0)!})

補足:「標準入力〜文字列の処理」をこんな関数にしてやると便利かも

funcreadInts()->[Int]{returnreadLine()!.split(separator:" ").map{Int($0)!}}

さて、続き。

lets="ぎょうざたべたい"//前から◯文字取得s.prefix(3)//ぎょう//後ろから◯文字取得s.suffix(2)//たい//◯文字切り捨てs.dropLast(2)//ぎょうざたべ//文字列切り出し m文字目〜n文字目leti1=s.index(s.startIndex,offsetBy:3)leti2=s.index(s.startIndex,offsetBy:6)s[i1...i2]//ざたべたs[i1..<i2]//ざたべ
//文字列結合lets1="はら"lets2="へった"s1+s2//はらへったletarray=["はら","へった"]array.joined()//はらへったarray.joined(separator:" ")//はら へったarray.joined(separator:",")//はら,へった
//文字列に文字が含まれるかlets="はろーSwift"ifs.contains("は"){print("OK")}
//文字列の一部を置き換えvars="はじめましてこんにちは"ifletrange=s.range(of:"こんにちは"){s.replaceSubrange(range,with:"さようなら")//はじめましてさようなら}
//大文字・小文字leta="swift".uppercased()letb="SWIFT".lowercased()
//ある文字列をn個繰り返すlets=String(repeating:"AB",count:5)// "ABABABABAB"

配列初期化

vara=[String]()varb=[[String]]()b.append(["はじ","めまして"])

配列並び替え

vararray=[5,2,6,7,1]array.sort{$0<$1}//昇順 [1,2,5,6,7]array.sort{$0>$1}//降順 [7,6,5,2,1]array.reversed()//逆順 [1,7,6,2,5]

・sort()は配列を書き換える
・sorted()は配列を書き換えない

配列絞り込み

//例:3で割り切れるもののみからなる配列にletarray=[5,2,6,3,1]array.filter({$0%3==0})//[6,3]

配列結合

letarr1=[5,2,6]letarr2=[3,1]arr1+arr2//[5,2,6,3,1]//配列に要素を追加letarr=["a","b","c","e"]arr.insert("d",at:3)//["a", "b", "c", "d", "e"]//配列末尾に要素を追加arr.append("←")//["a", "b", "c", "e", "f"]

配列の要素の合計値

letarray=[1,2,3,4,5]letresult=array.reduce(0){$0+$1}//15

このコードだとreduce()の良さが出てない気もしますが。。。

配列の全要素が条件を満たすかどうか

//全ての要素が偶数かどうかletvalues=[2,4,6,8]//contains()letisAllEven=!values.contains{!($0%2==0)}//allSatisfy()letisAllEven=values.allSatisfy{$0%2==0}

allSatisfy()の方が可読性が高いですね。Swift 4.2でSequenceに追加されたメソッドです。

配列のindexを取得

letscores=[8,6,1,62,90]//enumerated()for(index,score)inscores.enumerated(){print("\(index): \(score)")}//index(of: )ifletindex=scores.index(of:90){print("index: \(index)")}//index(where: )ifletindex=scores.index(where:{$0==90}){print("index: \(index)")}

enumerated()ですが、インデックスと要素のタプルを返します。

配列をユニークに

letarray=[3,4,2,2,1,5,1,3,4]letresult=array.reduce([],{$0.contains($1)?$0:$0+[$1]})// [1, 2, 3, 4, 5]

三項演算子を使って書いています。
[]に要素をわんこそばのように追加していくイメージです

絶対値

leta=abs(-6)//6

累乗

leta=pow(5.0,3)

◯進数

leta=44letstr2=String(num,radix:2)letstr16=String(num,radix:16)//2進数を10進数にletint=Int("110110",radix:2)

最大、最小

max(1,5,2)//5min(1,5,2)//2leth=[65.7,64.3,61.1,67.5,58.5,60.3,64.9]letmax=h.max()//67.5letmin=h.min()//58.5

倍数

//2の倍数か?leta=18a.isMultiple(of:2)//true

小数点以下切り捨て・切り上げ・四捨五入

leta=3.1floor(a)//切り捨て 3.0ceil(a)//切り上げ 4.0round(a)//四捨五入 3.0//小数点をずらして整数値にletb=a*10floor(b)/10//切り捨て 3ceil(b)/10//切り上げ 4round(b)/10//四捨五入 3

0埋めする format指定

letnum1=String(format:"%04d",9)//0009letnum2=String(format:"%0.3f",0.2)// 0.200

終わりに

「他にもこれよく使うよ」という文法があったらコメントで教えてくれると喜びます(笑)

一緒にpaizaランクSを目指しましょう!


Viewing all articles
Browse latest Browse all 757

Trending Articles