2016-06-01 6 views
-1

私はそれを比較できる単一のユニコード文字を格納するためのデータ構造を作成しています。golangにユニコード文字を格納する

二つの質問:

  1. 私はどのようなデータ型を使用していますか?

    type ds struct { char Char // What should Char be so that I can safely compare two ds? }

  2. 私は、任意の2つのUnicode文字列の最初の文字を比較するための方法が必要です。それを行う簡単な方法はありますか?基本的に、文字列の最初のユニコード文字を取得するにはどうすればよいですか?

+0

を行うことができます最初のUnicode文字を取得します。 – khrm

答えて

2

このように:type Char rune

"compare"に注意してください。これはUnicodeの複雑なことです。コードポイント(rune s)は数値的に比較することは簡単ですが(U + 0020 == U + 0020、U + 1234 < U + 2345)、これがかもしれないか、文字と他に何ユニコードオファーを組み合わせることで、与えられたケースを望むものではないかもしれません。

+0

ユニコード文字列の最初のルーンにアクセスするにはどうすればよいですか? –

+0

ユニコード/ utf8.DecodeRuneは[InString]:https://golang.org/pkg/unicode/utf8/#DecodeRuneとDecodeRuneInString – Volker

1
  1. utf8文字列を比較するには、そのrunevalueを確認する必要があります。 Runevalueはutf8文字のint32値です。標準パッケージ "unicode/utf8"を使用してください。パス「の文字列[0:]」最初の文字

    test := "春节" 
        runeValue, width := utf8.DecodeRuneInString(test[0:]) 
        fmt.Println(runeValue,width) 
        fmt.Printf("%#U %d", runeValue, runeValue) 
    

を取得するために今、あなたはまた、あなたが文字列を格納する必要が==演算子

  1. を使って2つの文字列の最初の文字のruneValueを比較することができます文字全体を保存したい場合は文字列で指定します。これを証明する

    type ds struct { 
        char string // What should Char be so that I can safely compare two ds? 
    } 
    

完全なコード:Volkers、答えから

package main 

import (
    "fmt" 
    "unicode/utf8" 
) 

type ds struct { 
    char string // What should Char be so that I can safely compare two ds? 
} 

func main() { 
    fmt.Println("Hello, playground") 

    ds1 := ds{"春节"} 
    ds2 := ds{"春节"} 

    runeValue1, _ := utf8.DecodeRuneInString(ds1.char[0:]) 
    runeValue2, _ := utf8.DecodeRuneInString(ds2.char[0:]) 

    fmt.Printf("%#U %#U", runeValue1, runeValue2) 

    if runeValue1 == runeValue2 { 
     fmt.Println("\nFirst Char Same") 
    } else { 
     fmt.Println("\nDifferent") 
    } 
} 

Golang Playground

0

は、我々だけで比較するのルーンを使用することができます。

  1. type Char rune
  2. 我々は単に今、私はこれを実証する完全なコードを与えている[]rune(str)[0]
+0

あなたはChar型のルーンを行う必要はありません。あなたが[] Char(str)[0]をしていない限り、 – khrm

関連する問題