2

그래서 몇 개의 NSMutableDictionary와 특정 사전에 대한 각 키/valeu 쌍이 문자열 또는 정수 값을 갖습니다. 사전을 반복하고 값을 연결하는 방법이 있는지 알고 싶습니다. PHP에서 나는 배열NSMutableDictionary의 모든 값을 int, NSInteger 및 NSString에 캐스팅합니다.

// either the dictionary holds all integers or all string values 
$integer_array = array('a' => 2, 'b' => 9, 'c' => 2, 'd' => 0, 'e' => 1); 

foreach($integer_array as $key => $value) { 
    $concatenated_value .= $value; 
} 

// cast to int 
$concatenated_value = (int) $concatenated_value; 

// prints: 29201 
echo $concatenated_value; 

나는 또한 아이폰 OS 오브젝티브 C에 대한 이런 일이 implode()뿐만 아니라

$concatenated_value = (int)(implode("", $integer_array)); 

// prints: 29201 
echo $concatenated_value; 

가 사용할 수를 사용하여이 같은 일을 할 수 있을까?

+0

'당신이 키를 정렬 한 후 루프에서 값을 연결하지 않는 한 회씩 연결이 무작위 있도록 목표 C에서 NSDictionary'가 정렬되지 않습니다. – dasblinkenlight

+0

예, 루프 내의 정렬은 내가 생각한 것입니다 –

답변

2

미리 정의 된 기능이 있다고 생각하지 않습니다. 나에게이 일은 아주 흔한 일이 아닌 것처럼 보입니다 (PHP에서 흔히 볼 수있는 것입니까?). 나는 코드가 이론과 같을 것이다 가정 :

int finalVal = 0; 
for (NSString *key in keyArray) 
{ 
    //If it is variable between NSString and NSNumber as you say, you will 
    //need to do type checking here. 
    NSNumber *numVal = [dictionary objectForKey:key]; 
    int num = [numVal intValue]; 

    //----Don't need this part if all values are single digits 
    while(num > 10) 
    { 
     finalVal += num; 
     finalVal *= 10; 
     num /= 10; 
    } 
    //-------------------------------------------------------- 

    finalVal += num; 
    finalVal *= 10; 
} 
finalVal /= 10; 

그러나,이 사전 주문한되지 않기 때문에 원하는 결과를 생성하는 것은 매우 어렵다. 난 당신이 다른 데이터 구조 또는 당신이 그들을 삽입 순서로 열쇠를 들고 배열이 필요하다고 생각하지만 (그 시점에서 당신은뿐만 아니라 그냥 배열을 사용할 수 있습니다).

EDIT 주문한 키 배열을 사용하고 있으므로 위 응답을 편집했습니다.

+0

예 반복에 대한 키 순서가 다른 NSArray가 있고 키로 사전의 값을 가져 와서 연결합니다 –

+0

글쎄, 그건 단지 작은 변화를 취할 것입니다 암호. – borrrden

+0

왜 finalVal * = 10을 편집할까요? 및 finalVal/= 10; 이 일이 무엇에 관한 것인지 좀 더 자세히 설명해 주시겠습니까? 그렇지 않으면 위대한 예! 그리고 네, 이것은 PHP에서 매우 일반적입니다 –

2

다음은 할 수있는 방법입니다 (코코아 사전은 주문하지 않기 때문에 다소 길어집니다).

NSMutableDictionary *d = [NSMutableDictionary dictionaryWithObjectsAndKeys: 
    [NSNumber numberWithInt:1], @"a", 
    [NSNumber numberWithInt:2], @"b", 
    [NSNumber numberWithInt:34], @"c", 
    [NSNumber numberWithInt:56], @"d",nil]; 
NSArray *sortedKeys = [[d allKeys] sortedArrayUsingSelector: @selector(compare:)]; 
NSMutableString *res = [NSMutableString string]; 
[sortedKeys enumerateObjectsUsingBlock:^(id obj, NSUInteger idx, BOOL *stop) { 
    [res appendFormat:@"%d", [[d objectForKey:obj] intValue]]; 
}]; 
NSLog(@"%@", res); 

이 인쇄 123456

+0

사전 키/값을 반대로 입력하는 방법을 보여줄 수 있습니까? 그래서 'a'가 키이고 값은 '1'이됩니다. –

+0

@PhillPafford 이것은 코드 스 니펫이 이미 보여주고있는 것입니다 : 숫자는 값이고, 문자열은 키입니다 (즉,'dictionaryWithObjectsAndKeys :'가 어떻게 작동하는지). – dasblinkenlight

+0

나는 화면을 너무 오랫동안 보아 왔다고 생각한다. 나는이 LOL 감사를 알았다. –

관련 문제