[英]How to get all the value of one element on the basis of other element in a swift NSMutableArray
I want to get all the doctor name where Department name is "Internal Medicine.\\n " from NSMutableArray
in Swift language . 我想从
NSMutableArray
以Swift语言获取部门名称为“ Internal Medicine。\\ n”的所有医生名称。
(
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. A. K. Kundu\n ";
},
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. Arvind K. Minz\n ";
},
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. Rajeev Choudhary\n ";
},
{
DepartmentName = "Obstetrics And Gynaecology.\n ";
DoctorName = "Dr. Gouri Jain\n ";
},
{
DepartmentName = "Obstetrics And Gynaecology.\n ";
DoctorName = "Dr. Poonam Kataria\n ";
},
{
DepartmentName = "Obstetrics And Gynaecology.\n ";
DoctorName = "Dr. Ila Jha\n ";
},
{
DepartmentName = "Internal Medicine.\n ";
DoctorName = "Dr. Ram Niwas Gupta\n ";
},
{
DepartmentName = "Gasteroenterology.\n ";
DoctorName = "Dr. Sanjay Kumar\n ";
},
{
DepartmentName = "Neurology.\n ";
DoctorName = "Dr. Sameer Gupta\n ";
},
{
DepartmentName = "Physiotherapy And Rehabilitation.\n ";
DoctorName = "Dr. Kapil Chauhan\n ";
},
{
DepartmentName = "XRay.\n ";
DoctorName = "Dr. Gagan Sharma\n ";
}
)
I can easily get all the department and doctor name by using valueforkey
(eg. posts.valueForKey("DoctorName") or posts.valueForKey
("Departmentname") ) and now I want to get all the doctor name where the department name is selected from department list 我可以通过使用
valueforkey
(例如posts.valueForKey(“ DoctorName”)或posts.valueForKey
(“ Departmentname”))轻松获得所有部门名称和医生名称, 现在我想获取选择了部门名称的所有医生名称从部门清单
My complete code : 我完整的代码:
import UIKit
import ActionSheetPicker_3_0
class SearchController: UIViewController, NSXMLParserDelegate, UISearchBarDelegate , UITableViewDelegate , UITableViewDataSource {
@IBOutlet weak var selectDepartmentView: UIButton!
@IBOutlet weak var selectDoctorView: UIButton!
var parser = NSXMLParser()
var posts = NSMutableArray()
var DoctorArray = NSMutableArray()
var DepartmentArray = NSMutableArray()
var DoctorArrayAsDepartment = NSMutableArray()
var elements = NSMutableDictionary()
var element = NSString()
var nsArray = NSMutableString()
var nsArray2 = NSMutableString()
var PickValue=""
//=======search bar============
var searchActive : Bool = false
var filtered:[String] = []
//======search Bar===============
var nonMutableArray:[String] = []
@IBOutlet weak var searchBar: UISearchBar!
@IBOutlet weak var tableView: UITableView!
override func viewDidLoad() {
super.viewDidLoad()
// self.GetDeartmentsListParsing()
self.GetDocotorListParsing()
// Do any additional setup after loading the view.
searchBar.delegate = self
tableView.delegate = self
tableView.dataSource = self
tableView.tableFooterView = UIView(frame: CGRectZero)
}
func searchBarTextDidBeginEditing(searchBar: UISearchBar) {
searchActive = true;
}
func searchBarTextDidEndEditing(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarCancelButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBarSearchButtonClicked(searchBar: UISearchBar) {
searchActive = false;
}
func searchBar(searchBar: UISearchBar, textDidChange searchText: String) {
filtered = nonMutableArray.filter({ (text) -> Bool in
let tmp: NSString = text
let range = tmp.rangeOfString(searchText, options: NSStringCompareOptions.CaseInsensitiveSearch)
return range.location != NSNotFound
})
if(filtered.count == 0){
searchActive = false;
} else {
searchActive = true;
}
self.tableView.reloadData()
println("searchText:" + searchText)
// searchBar.text = filtered[indexPath.row]
}
override func didReceiveMemoryWarning() {
super.didReceiveMemoryWarning()
// Dispose of any resources that can be recreated.
}
func numberOfSectionsInTableView(tableView: UITableView) -> Int {
return 1
}
func tableView(tableView: UITableView, numberOfRowsInSection section: Int) -> Int {
if(searchActive) {
return filtered.count
}
return nonMutableArray.count;
}
func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
let cell = tableView.dequeueReusableCellWithIdentifier("Cell") as UITableViewCell;
if(searchActive){
cell.textLabel?.text = filtered[indexPath.row]
} else {
cell.textLabel?.text = nil
// nonMutableArray.removeAll()
}
return cell;
}
func GetDocotorListParsing()
{
posts = []
parser = NSXMLParser(contentsOfURL:(NSURL(string:"http://13.192.12.86:201/Api_interfaceTest.aspx?opname=something&PassKey=xyz")))
parser.delegate = self
parser.parse()
println("into GetDoctorListParsing")
}
func parser(parser: NSXMLParser, didStartElement elementName: String, namespaceURI: String?, qualifiedName qName: String?, attributes attributeDict: [String : String])
{
element = elementName
if (elementName as NSString).isEqualToString("ReturnTable")
{
elements = NSMutableDictionary()
elements = [:]
nsArray = NSMutableString()
nsArray = ""
nsArray2 = NSMutableString()
nsArray2 = ""
}
}
func parser(parser: NSXMLParser!, foundCharacters string: String!)
{
if element.isEqualToString("Departmentname") {
nsArray.appendString(string) // nsArray is NSMutableString
}
else if element.isEqualToString("PersonFullName") {
nsArray2.appendString(string)
}
}
func parser(parser: NSXMLParser!, didEndElement elementName: String!, namespaceURI: String!, qualifiedName qName: String!)
{
if (elementName as NSString).isEqualToString("Departmentname") {
if !nsArray.isEqual(nil) {
elements.setObject(nsArray, forKey: "DepartmentName")
}
if !nsArray2.isEqual(nil) {
elements.setObject(nsArray2, forKey: "DoctorName")
}
posts.addObject(elements)
// ===== This is the posts array i gave output above ===
let myArrayDepartment = (posts.valueForKey("DepartmentName") as? [String])
DepartmentArray = NSMutableArray(array: myArrayDepartment!)
println(DepartmentArray)
let myArrayDoctor = posts.valueForKey("DoctorName") as? [String]
DoctorArray = NSMutableArray(array: myArrayDoctor!)
println(DoctorArray)
nonMutableArray = DoctorArray as AnyObject as [String]
}
}
@IBAction func SelectDoctorButton(sender: AnyObject) {
// Inside a IBAction method:
// Create an array of strings you want to show in the picker:
searchActive = false;
ActionSheetMultipleStringPicker.showPickerWithTitle("Select Department", rows: [
DepartmentArray], initialSelection: [1], doneBlock: {
picker, values, indexes in
print("values = \(values)")
print("indexes = \(indexes)")
print("picker = \(picker)")
var firstValue: AnyObject! = indexes[0]
self.PickValue = firstValue as String
self.selectDepartmentView.setTitle(firstValue as? String, forState: UIControlState.Normal)
for var i=0 ; i<10 ; i++ {
let indexes = (self.posts.valueForKey("DepartmentName"))?.indexOfObject(self.PickValue)
// println("@@@@@sucess@@@@" + index)
NSLog("\(indexes)")
// find(posts.valueForKey("DepartmentName")),"")
}
return
}, cancelBlock: { ActionMultipleStringCancelBlock in return }, origin: sender)
// You can also use self.view if you don't have a sender
}
@IBAction func SelectDoctor(sender: AnyObject) {
tableView.reloadData()
searchActive = false;
ActionSheetMultipleStringPicker.showPickerWithTitle("Select Doctor", rows: [
DoctorArray,
], initialSelection: [1, 1], doneBlock: {
picker, values, indexes in
print("values = \(values)")
print("indexes = \(indexes)")
print("picker = \(picker)")
var firstValue: AnyObject! = indexes[0]
self.PickValue = firstValue as String
self.selectDoctorView.setTitle(firstValue as? String, forState: UIControlState.Normal)
return
}, cancelBlock: { ActionMultipleStringCancelBlock in return }, origin: sender)
}
// Build in Methode
override func touchesBegan(touches: NSSet, withEvent event: UIEvent) {
self.view.endEditing(true)
}
}
I suggest you create a new Object named Doctor 我建议您创建一个名为Doctor的新对象
class Doctor: NSObject {
var doctorName = ""
var departmentName = ""
}
So that you can easily parse your data to new Doctor
and store it like an array. 这样您就可以轻松地将数据解析为新的
Doctor
,并将其存储为数组。 It will be easier to filter, find or do anything. 过滤,查找或执行任何操作将更加容易。
Hope this help. 希望能有所帮助。
I solved the problem by easy step : 我通过简单的步骤解决了这个问题:
Here department name and doctor name are on same index SO what i did is simply get indexOfObject() from DepartmentArrray and After that objectAtIndex() from DoctorArray. 在这里,部门名称和医生名称在同一索引上,所以我所做的只是从DepartmentArrray获得indexOfObject(),然后从DoctorArray获得objectAtIndex()。
Here is my code inside @IBAction func SelectDoctorButton(sender: AnyObject) : 这是我在@IBAction func SelectDoctorButton(sender:AnyObject)中的代码:
var indexOfObject = 0
for var index = 0 ; index < self.DepartmentArray.count ; index++ {
if self.PickValue == self.DepartmentArray[index] as NSString{
indexOfObject = index
println(" pickValue is at index : \(indexOfObject) ")
println(self.DoctorArray.objectAtIndex(index))
self.DoctorArrayAsDepartment.addObject(self.DoctorArray.objectAtIndex(index))
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.