2012-11-02 63 views
0

在C#中我可以這樣做:如何測試一個對象數組是否包含字符串?

public string[] MyStrings; 
... 
... 
if(MyStrings.Contains("bob")) ... 

在ObjectScript這是怎麼完成的?

隨着%ArrayOfObjects類型我沒有看到正是我要找here

我曾嘗試:

#Dim MyStrings As %ArrayOfDataTypes 
do MyStrings.SetAt("User","User") 
do MyStrings.SetAt("Users","Users") 
do MyStrings.SetAt("Group","Group") 
do MyStrings.SetAt("Groups","Groups") 

// if MyStrings contains Groups 
if MyStrings.GetAt("Groups") '= "" 
{ 
} 
+0

@Trisped - updated –

+0

感謝您的更新。我刪除了我以前的評論。 – Trisped

回答

1

你說得對。我建議使用你自己的方法來創建%Library.ArrayOfDataTypes的子類,比如「contains」。

使用你自己控制的類比你不管用的庫類可能更安全一些(儘管你可以使用%Dictionary包方法將所有對庫類的引用切換爲新的設計類,所以它不是什麼大不了的)。

+0

好主意。爲什麼使用我自己的類更安全? –

+0

如果你在500個地方使用課程,然後出於任何原因想要改變課程,你不能這樣做。 (好吧,你*可以*,但是每次升級時你的改變都會被覆蓋)。如果是你自己的班級,你可以。 (但是,正如我所說的,無論如何,你都可以通過編程的方式將所有從Intersystem類的引用更改爲自己的類,所以它實際上不是那麼重要)。 – psr

+0

哦,我理解重用。但是你似乎認爲Intersystems可能會改變他們的代碼,而不是向後兼容。哎呀!謝謝。 –

1

我不熟悉的語言,但你可以嘗試像:

//declare myString to hold a string 
set myString = MyStrings.GetNext("") 
While myString '= "" 
{ 
    if MyStrings.GetAt(myString) '= "" //Or should it be something like myString.value? Is there a way to check the type of an object to see if it is a string? 
    { 
     //Do something here. Exit loop if you are trying to find just a match. 
    } 
} 

我假設'=相當於!=在C#。

+0

是'=不相等,沒有空值,只有「」。不錯的嘗試,但我認爲可能有一個更簡單的方法。 –

+0

在這種情況下,您不希望迭代整個數組(因爲GetAt實際上會獲取由該鍵存儲的值)。由於在這種情況下,鍵和值是相同的,只需要執行GetAt(myString)即可。 – psr

+0

@psr OP沒有聲明密鑰和值是相同的。它也不保證這些值是字符串。 – Trisped

1

聽起來像是你想要.IsDefined() method。例如:

#Dim MyStrings As %ArrayOfDataTypes 
do MyStrings.SetAt("User","User") 
do MyStrings.SetAt("Users","Users") 
do MyStrings.SetAt("Group","Group") 
do MyStrings.SetAt("Groups","Groups") 

// if MyStrings contains Groups 
if MyStrings.IsDefined("Groups") 
{ 
    // code to execute if MyStrings contained "Groups" 
} 
相關問題