亚洲在线久爱草,狠狠天天香蕉网,天天搞日日干久草,伊人亚洲日本欧美

為了賬號安全,請及時綁定郵箱和手機立即綁定
已解決430363個問題,去搜搜看,總會有你想問的

來自NSCharacterSet的NSArray

來自NSCharacterSet的NSArray

目前,我能夠制作如下的字母數組[[NSArray alloc]initWithObjects:@"A",@"B",@"C",@"D",@"E",@"F",@"G",@"H",@"I",@"J",@"K",@"L",@"M",@"N",@"O",@"P",@"Q",@"R",@"S",@"T",@"U",@"V",@"W",@"X",@"Y",@"Z",nil];知道可用[NSCharacterSet uppercaseLetterCharacterSet]如何制作一個數組呢?
查看完整描述

3 回答

?
森欄

TA貢獻1810條經驗 獲得超5個贊

以下代碼創建一個包含給定字符集的所有字符的數組。它也適用于“基本多語言平面”之外的字符(字符> U + FFFF,例如U + 10400 DESERET CAPITAL LETTER LONG I)。


NSCharacterSet *charset = [NSCharacterSet uppercaseLetterCharacterSet];

NSMutableArray *array = [NSMutableArray array];

for (int plane = 0; plane <= 16; plane++) {

    if ([charset hasMemberInPlane:plane]) {

        UTF32Char c;

        for (c = plane << 16; c < (plane+1) << 16; c++) {

            if ([charset longCharacterIsMember:c]) {

                UTF32Char c1 = OSSwapHostToLittleInt32(c); // To make it byte-order safe

                NSString *s = [[NSString alloc] initWithBytes:&c1 length:4 encoding:NSUTF32LittleEndianStringEncoding];

                [array addObject:s];

            }

        }

    }

}

為此,uppercaseLetterCharacterSet給出了1467個元素的數組。但請注意,字符> U + FFFF作為UTF-16代理對存儲在中NSString,因此例如U + 10400實際上存儲NSString為2個字符“ \ uD801 \ uDC00”。


Swift 2代碼可以在此問題的其他答案中找到。這是一個Swift 3版本,作為擴展方法編寫的:


extension CharacterSet {

    func allCharacters() -> [Character] {

        var result: [Character] = []

        for plane: UInt8 in 0...16 where self.hasMember(inPlane: plane) {

            for unicode in UInt32(plane) << 16 ..< UInt32(plane + 1) << 16 {

                if let uniChar = UnicodeScalar(unicode), self.contains(uniChar) {

                    result.append(Character(uniChar))

                }

            }

        }

        return result

    }

}

例:


let charset = CharacterSet.uppercaseLetters

let chars = charset.allCharacters()

print(chars.count) // 1521

print(chars) // ["A", "B", "C", ... "]

(請注意,某些字符可能不會顯示在用于顯示結果的字體中。)


查看完整回答
反對 回復 2019-10-11
  • 3 回答
  • 0 關注
  • 544 瀏覽

添加回答

舉報

0/150
提交
取消
微信客服

購課補貼
聯系客服咨詢優惠詳情

幫助反饋 APP下載

慕課網APP
您的移動學習伙伴

公眾號

掃描二維碼
關注慕課網微信公眾號