Enumeration

UnboundedRange_

A range expression that represents the entire range of a collection. あるコレクションの全体の範囲を表す範囲式。

Declaration 宣言

@frozen enum UnboundedRange_

Overview 概要

You can use the unbounded range operator (...) to create a slice of a collection that contains all of the collection’s elements. Slicing with an unbounded range is essentially a conversion of a collection instance into its slice type. あなたは、無境界範囲演算子(...)を使って、あるコレクションのスライスでそのコレクションのもつ要素すべてを含んでいるものを作成できます。無境界範囲でスライスすることは、本質的にあるコレクションインスタンスのそれのスライス型への変換です。

For example, the following code declares countLetterChanges(_:_:), a function that finds the number of changes required to change one word or phrase into another. The function uses a recursive approach to perform the same comparisons on smaller and smaller pieces of the original strings. In order to use recursion without making copies of the strings at each step, countLetterChanges(_:_:) uses Substring, a string’s slice type, for its parameters. 例えば、以下のコードはcountLetterChanges(_:_:)、ある単語または語句を別のものへ変更するのに必要とされる変更の数を見つける関数、を宣言します。この関数は、反復する取り組みを使って、元の文字列のどんどん小さい断片上で同じ比較を実行します。各段階で文字列のコピーを作ることなく反復を使う手段として、countLetterChanges(_:_:)Substring、文字列の持つスライス型、をそれのパラメータに対して使います。


func countLetterChanges(_ s1: Substring, _ s2: Substring) -> Int {
    if s1.isEmpty { return s2.count }
    if s2.isEmpty { return s1.count }


    let cost = s1.first == s2.first ? 0 : 1


    return min(
        countLetterChanges(s1.dropFirst(), s2) + 1,
        countLetterChanges(s1, s2.dropFirst()) + 1,
        countLetterChanges(s1.dropFirst(), s2.dropFirst()) + cost)
}

To call countLetterChanges(_:_:) with two strings, use an unbounded range in each string’s subscript. countLetterChanges(_:_:)を2つの文字列で呼び出すには、無境界範囲を各文字列の添え字において使ってください。


let word1 = "grizzly"
let word2 = "grisly"
let changes = countLetterChanges(word1[...], word2[...])
// changes == 2

Topics 話題

Creating an Unbounded Range 無境界範囲の作成

Type Aliases 型エイリアス

See Also 参照

Range Expressions 範囲式